import 'package:decimal/decimal.dart';

///引用的库 decimal: ^2.3.3

class NumUtils {
  ///加（精确相加，防止精度丢失）
  static double add(num a, num b) {
    Decimal d1 = Decimal.parse(a.toString());
    Decimal d2 = Decimal.parse(b.toString());
    return (d1 + d2).toDouble();
  }

  ///加（精确相加，防止精度丢失）四舍五入保留制定位数小数
  static String addStr(num a, num b, int digits) {
    Decimal d1 = Decimal.parse(a.toString());
    Decimal d2 = Decimal.parse(b.toString());
    return (d1 + d2).toDouble().toStringAsFixed(digits);
  }

  ///减（精确相减，防止精度丢失）
  static double subtract(num a, num b) {
    Decimal d1 = Decimal.parse(a.toString());
    Decimal d2 = Decimal.parse(b.toString());
    return (d1 - d2).toDouble();
  }

  ///减（精确相减，防止精度丢失）四舍五入保留制定位数小数
  static subtractStr(num a, num b, int digits) {
    Decimal d1 = Decimal.parse(a.toString());
    Decimal d2 = Decimal.parse(b.toString());
    return (d1 - d2).toDouble().toStringAsFixed(digits);
  }

  ///乘（精确相乘，防止精度丢失）
  static double multiply(num a, num b) {
    Decimal d1 = Decimal.parse(a.toString());
    Decimal d2 = Decimal.parse(b.toString());
    return (d1 * d2).toDouble();
  }

  ///乘（精确相乘，防止精度丢失）四舍五入保留制定位数小数
  static String multiplyStr(num a, num b, int digits) {
    Decimal d1 = Decimal.parse(a.toString());
    Decimal d2 = Decimal.parse(b.toString());
    return (d1 * d2).toDouble().toStringAsFixed(digits);
  }

  ///除（精确相除，防止精度丢失）
  static double divide(num a, num b) {
    Decimal d1 = Decimal.parse(a.toString());
    Decimal d2 = Decimal.parse(b.toString());
    return (d1 / d2).toDouble();
  }

  ///除（精确相除，防止精度丢失）四舍五入保留制定位数小数
  static String divideStrNum(num a, num b, int digits) {
    return divide(a, b).toStringAsFixed(digits);
  }

  ///余数
  static Decimal remainder(num a, num b) {
    Decimal d1 = Decimal.parse(a.toString());
    Decimal d2 = Decimal.parse(b.toString());
    return d1 % d2;
  }
}
